/**
 * 
 */
package org.vectrics.cv;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.vectrics.common.db.RecordObject;

/**
 * Representa una habilidades o conocimiento necesario para el perfil del
 * puesto.
 * 
 * @author maguero
 */
public class Skill implements Serializable, RecordObject, Comparable<ListableSkill>, ListableSkill {

    private static final long serialVersionUID = -4920909486658193324L;

    /** id. */
    private Long id;

    /** Nombre del skill. */
    private String name;

    /** Skill padre. */
    private Skill parentSkill;

    /** skills hijos. */
    private Set<Skill> childSkills = new HashSet<Skill>();

    /** tipo de skill */
    private SkillType type;

    /**
     * Compara el objeto Skill contra otro objeto Skill, seg�n sus nombres.
     * 
     * @return int: cero si son iguales, un entero negativo si el Skill es menor
     *         que el pasado por par�metro o entero positivo en el caso que el
     *         Skill enviado por par�metro sea el menor.
     */
    @Override
    public int compareTo(final ListableSkill o) {
        return getName().compareTo(o.getName());
    }

    @Override
    public PersonSkill getPersonSkill() {
        return null;
    }

    @Override
    public Skill getSkill() {
        return this;
    }

    @Override
    public Long getId() {
        return id;
    }

    @Override
    public void setId(final Long id) {
        this.id = id;
    }

    @Override
    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }
    
    public String getSkillAndParentName (){
    	return this.parentSkill.getName()+" - "+getName();
    }

    public Skill getParentSkill() {
        return parentSkill;
    }

    public void setParentSkill(final Skill parentSkill) {
        this.parentSkill = parentSkill;
    }

    public Set<Skill> getChildSkills() {
        return childSkills;
    }

    public void setChildSkills(final Set<Skill> childSkills) {
        this.childSkills = childSkills;
    }

    /**
     * @return the type
     */
    public SkillType getType() {
        return type;
    }

    /**
     * @param type
     *            the type to set
     */
    public void setType(final SkillType type) {
        this.type = type;
    }
}
